/**
 * 文档模板系统类型定义
 * 支持预设模板和自定义模板的统一管理
 */

import { ContentType } from './document'

// 模板分类枚举
export enum TemplateCategory {
  NEWS = 'news',                // 新闻类
  REPORT = 'report',            // 报告类
  BLOG = 'blog',                // 博客类
  MEETING = 'meeting',          // 会议类
  MARKETING = 'marketing',      // 营销类
  ACADEMIC = 'academic',        // 学术类
  BUSINESS = 'business',        // 商务类
  PERSONAL = 'personal',        // 个人类
  CUSTOM = 'custom'             // 自定义类
}

// 模板类型标签枚举
export enum TemplateLabelType {
  FORMAL = 'formal',            // 正式文档
  CASUAL = 'casual',            // 休闲文档
  TECHNICAL = 'technical',      // 技术文档
  CREATIVE = 'creative',        // 创意文档
  STRUCTURED = 'structured'     // 结构化文档
}

// 模板元数据接口
export interface TemplateMetadata {
  author?: string               // 作者
  version: string               // 版本号
  estimatedLength?: number      // 预估长度(字数)
  difficulty: 'easy' | 'medium' | 'hard'  // 难度级别
  language: 'zh-CN' | 'en-US'   // 语言
  license?: string              // 许可证
}

// 文档模板主要数据结构
export interface DocumentTemplate {
  id: string                    // 模板唯一标识
  name: string                  // 模板名称
  description?: string          // 模板描述
  category: TemplateCategory    // 模板分类
  type: TemplateLabelType       // 模板类型标签
  contentType: ContentType      // 内容类型
  content: string               // 模板内容
  metadata: TemplateMetadata    // 模板元数据
  isBuiltIn: boolean           // 是否为内置模板
  createdAt: Date              // 创建时间
  updatedAt: Date              // 更新时间
  usageCount: number           // 使用次数
  tags: string[]               // 标签
}

// 内置模板配置接口
export interface BuiltInTemplateConfig {
  id: string
  name: string
  description: string
  category: TemplateCategory
  type: TemplateLabelType
  contentType: ContentType
  content: string
  metadata: TemplateMetadata
  tags: string[]
}

// 模板统计信息接口
export interface TemplateStats {
  totalTemplates: number        // 总模板数
  builtInTemplates: number      // 内置模板数
  customTemplates: number       // 自定义模板数
  categoryCounts: Record<TemplateCategory, number>  // 分类统计
  typeCounts: Record<TemplateLabelType, number>     // 类型统计
  mostUsedTemplates: DocumentTemplate[]  // 最常用模板
  recentTemplates: DocumentTemplate[]    // 最近使用模板
}

// 模板筛选条件接口
export interface TemplateFilters {
  category?: TemplateCategory[]  // 按分类筛选
  type?: TemplateLabelType[]    // 按类型筛选
  tags?: string[]              // 按标签筛选
  contentType?: ContentType[]  // 按内容类型筛选
  isBuiltIn?: boolean          // 是否为内置模板
  difficulty?: TemplateMetadata['difficulty'][]  // 按难度筛选
  language?: TemplateMetadata['language'][]       // 按语言筛选
  searchQuery?: string         // 搜索关键词
}

// 模板搜索结果接口
export interface TemplateSearchResult {
  templates: DocumentTemplate[]
  total: number
  hasMore: boolean
  filters?: TemplateFilters
}

// 模板创建输入
export interface CreateTemplateInput {
  name: string
  description?: string
  category: TemplateCategory
  type: TemplateLabelType
  contentType: ContentType
  content: string
  metadata: Omit<TemplateMetadata, 'version'>
  tags: string[]
}

// 模板更新输入
export interface UpdateTemplateInput {
  name?: string
  description?: string
  category?: TemplateCategory
  type?: TemplateLabelType
  content?: string
  metadata?: Partial<TemplateMetadata>
  tags?: string[]
}

// 模板操作结果类型
export type TemplateOperationResult<T = void> = {
  success: true
  data: T
} | {
  success: false
  error: string
  code?: string
}

// 模板导入导出数据格式
export interface TemplateExportData {
  version: string
  exportDate: string
  templates: DocumentTemplate[]
  metadata: {
    totalCount: number
    categories: TemplateCategory[]
    source: string
  }
}

// 模板导入结果
export interface TemplateImportResult {
  success: boolean
  templateIds: string[]
  errors: string[]
  warnings: string[]
}

// 模板存储键常量
export const TEMPLATE_STORAGE_KEYS = {
  TEMPLATE_PREFIX: 'rmzf:template:',
  TEMPLATE_LIST: 'rmzf:templates:list',
  TEMPLATE_STATS: 'rmzf:templates:stats',
  TEMPLATE_CATEGORIES: 'rmzf:templates:categories',
  TEMPLATE_VERSION: 'rmzf:templates:version'
} as const

// 模板创建选项
export interface CreateTemplateOptions {
  name: string
  description?: string
  category: TemplateCategory
  type: TemplateLabelType
  tags?: string[]
  metadata?: Partial<TemplateMetadata>
}

// 从模板创建文档的选项
export interface CreateFromTemplateOptions {
  templateId: string
  customTitle?: string
  replacements?: Record<string, string>  // 变量替换
}

// 模板分类信息
export interface TemplateCategoryInfo {
  category: TemplateCategory
  name: string
  description: string
  icon: string
  count: number
}

// 模板类型信息
export interface TemplateTypeInfo {
  type: TemplateLabelType
  name: string
  description: string
  color: string
  count: number
}

// 模板验证错误类型
export enum TemplateValidationError {
  INVALID_NAME = 'INVALID_NAME',
  INVALID_CONTENT = 'INVALID_CONTENT',
  INVALID_CATEGORY = 'INVALID_CATEGORY',
  INVALID_TYPE = 'INVALID_TYPE',
  DUPLICATE_ID = 'DUPLICATE_ID',
  MISSING_METADATA = 'MISSING_METADATA'
}

// 模板验证结果
export interface TemplateValidationResult {
  isValid: boolean
  errors: {
    field: string
    error: TemplateValidationError
    message: string
  }[]
}